<?php
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/util/database.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/bitacoras_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/usuario_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/oferta_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/email/email_distribution_list.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/email/sent_email.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/templates/temp_notificacion_nuevo_empleador.php");
class EmpleadorDTO {
	public function __construct() {
		exit ( 'Init function is not allowed' );
	}
	public static function insert($idDepartamento, $idMunicipio, $nombreEmpresa, $paginaWeb, $nit, $nombreContacto, $telOficinaContacto, $telCelularContacto, $emailContacto, $descripcionEmpresa, $giroEmpresa, $domicilio, $login, $clave) {
		
		// molde query
		$query = "INSERT INTO tbl_empleador SET tbl_municipio_tbl_departamento_id_departamento = ?, 
				 tbl_municipio_id_municipio = ?, nombre_empresa = ?, pagina_web = ?, nit = ?,
				 nombre_contacto = ?, tel_oficina_contacto  = ?, email_contacto = ?, tel_celular_contacto = ?,
				 descripcion_empresa = ?, id_giro_empresa = ?, domicilio= ?, login = ?, clave = md5(?), estado = ?, ultimo_acceso = ?";
		
		$estado = 'Nuevo';
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		// idDepartamento
		$stmt->bindParam ( 1, $idDepartamento );
		
		// idMunicipio
		$stmt->bindParam ( 2, $idMunicipio );
		
		// Nombres
		$stmt->bindParam ( 3, $nombreEmpresa );
		
		$stmt->bindParam ( 4, $paginaWeb );
		
		$stmt->bindParam ( 5, $nit );
		
		$stmt->bindParam ( 6, $nombreContacto );
		
		$stmt->bindParam ( 7, $telOficinaContacto );
		
		$stmt->bindParam ( 8, $emailContacto );
		
		$stmt->bindParam ( 9, $telCelularContacto );
		
		$stmt->bindParam ( 10, $descripcionEmpresa );
		
		$stmt->bindParam ( 11, $giroEmpresa );
		
		$stmt->bindParam ( 12, $domicilio );
		
		$stmt->bindParam ( 13, $login );
		
		$stmt->bindParam ( 14, $clave );
		
		$stmt->bindParam ( 15, $estado );
		
		$dt = new DateTime();
		$stringDate = $dt->format('Y-m-d H:i:s');
		
		$stmt->bindParam ( 16, $stringDate );
		
		// Execute the query
		if ($stmt->execute ()) {
			error_log ( 'Nuevo Empleador creado procediendo a registrar en la bitacora y enviar correo', 0 );
			$idAsignado = UsuarioDTO::validateLoginEmpleador ( $login, $clave );
			$admin = null;
			// Si se escribio en la Bitacora y se pudo crear
			$res = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idAsignado, $idAsignado, $admin, 'Nuevo Empleador - Pendiente de Activacion', 'CREACION' );
			$resEmail = self::notificarNuevoEmpleadorRegistro ( $idAsignado, $emailContacto, $nombreContacto, $nombreEmpresa, $nit );
			// procederemos a notificar por correo
			
			if ($res == true && $resEmail == true) {
				return true;
			} else {
				return false;
			}
		} else {
			error_log ( 'No se pudo crear el empleador', 0 );
			Database::disconnect ();
			return false;
		}
	}
	
	
	
	public static function updateBasicAspirante($nombreEmpresa,$paginaWeb,$nit,$nombreContacto, 
			$telOficina,$telCelular,$emailContacto,$descripcionEmpresa,$giroEmpresa, 
			$departamento,$municipio,$domicilio,$idEmpleador){
		
		$query = "update tbl_empleador 
					SET tbl_municipio_tbl_departamento_id_departamento = ?,
				 		tbl_municipio_id_municipio = ?, nombre_empresa = ?, 
						pagina_web = ?, nit = ?,
				 		nombre_contacto = ?, tel_oficina_contacto  = ?, 
						email_contacto = ?, tel_celular_contacto = ?,
				 		descripcion_empresa = ?, id_giro_empresa = ?, 
						domicilio= ? 
					where id_empleador = ?";
		
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		// idDepartamento
		$stmt->bindParam ( 1, $departamento );
		
		// idMunicipio
		$stmt->bindParam ( 2, $municipio );
		
		// Nombres
		$stmt->bindParam ( 3, $nombreEmpresa );
		
		$stmt->bindParam ( 4, $paginaWeb );
		
		$stmt->bindParam ( 5, $nit );
		
		$stmt->bindParam ( 6, $nombreContacto );
		
		$stmt->bindParam ( 7, $telOficina );
		
		$stmt->bindParam ( 8, $emailContacto );
		
		$stmt->bindParam ( 9, $telCelular );
		
		$stmt->bindParam ( 10, $descripcionEmpresa );
		
		$stmt->bindParam ( 11, $giroEmpresa );
		
		$stmt->bindParam ( 12, $domicilio );
		
		$stmt->bindParam ( 13, $idEmpleador );
		
		if ($stmt->execute ()) {
			error_log ( 'Informacion Empleador modificado procediendo a registrar en la bitacora', 0 );
			
			$admin = null;
			// Si se escribio en la Bitacora y se pudo crear
			$res = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idEmpleador, $idEmpleador, $admin, 'Modificacion Informacion Empleador', 'MODIFICACION' );
			return true;
		}else{
			return false;
		}
		
	}
	
	
	public static function notificarNuevoEmpleadorRegistro($idEmpleador, $emailEmpleador, $nombreContacto, $nombreEmpresa, $nit) {
		// Primero Notificaremos a los administradores
		$admonEmail = EmailDistributionList::getEmailAdministradores ();
		
		global $prNuevoEmpleadorToAdmin;
		global $messageToAdministrador;
		global $greetingToAdministrador;
		
		$prNuevoEmpleadorToAdmin = $prNuevoEmpleadorToAdmin . ' ID Empleador ' . $idEmpleador . ' Empresa: ' . $nombreEmpresa;
		$messageToAdministrador = $messageToAdministrador . ' Informacion Nuevo Empleador: ' . ' ID Empleador ' . $idEmpleador . ' Empresa: ' . $nombreEmpresa;
		$resEnvio = sentEmail ( $greetingToAdministrador, $messageToAdministrador, $prNuevoEmpleadorToAdmin, $admonEmail );
		
		if ($resEnvio) {
			// Procedemos Enviar al Usuario Empleador
			global $greetingToEmpleador;
			global $prNuevoEmpleadorToUser;
			global $messageToEmpledor;
			
			$greetingToEmpleador = $greetingToEmpleador . $nombreContacto;
			$prNuevoEmpleadorToUser = $prNuevoEmpleadorToUser . $nombreEmpresa;
			$messageToEmpledor = $messageToEmpledor . ' Informacion Empresa: ' . $nombreEmpresa . ' NIT: ' . $nit;
			$emailsArray = array ();
			array_push ( $emailsArray, $emailEmpleador );
			$resEmpleador = sentEmail ( $greetingToEmpleador, $messageToEmpledor, $prNuevoEmpleadorToUser, $emailsArray );
			return true;
		} else {
			return false;
		}
	}
	
	/*
	 * select emp.* from tbl_empleador as emp where emp.id_empleador = 1;
	 */
	public static function readEmpleador($idEmpleador) {
		$pdo = Database::connect ();
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$sql = "select emp.nombre_empresa, emp.nit , emp.pagina_web, gir.descripcion_giro_empresa, emp.descripcion_empresa, 
						emp.nombre_contacto, emp.email_contacto, emp.tel_oficina_contacto, emp.tel_celular_contacto, 
						dep.nombre_departamento, muni.nombre_municipio, emp.domicilio, emp.estado
						from 
							tbl_empleador as emp, 
							tbl_giro_empresa as gir, 
							tbl_departamento as dep,
							tbl_municipio as muni
						where emp.id_empleador = ? and
						gir.id_giro_empresa = emp.id_giro_empresa and 
						dep.id_departamento = emp.tbl_municipio_tbl_departamento_id_departamento and
						muni.id_municipio = emp.tbl_municipio_id_municipio";
	 	
		$q = $pdo->prepare ( $sql );
		$q->execute ( array (
				$idEmpleador 
		) );
		return $q;
	}
	
	
	public static function getEmpleador($idEmpleador){
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "select * from tbl_empleador where id_empleador = ?";
		$q = $pdo->prepare($sql);
		$q->execute(array($idEmpleador));
		Database::disconnect();
		return $q;
	}
	
	
	
	public static function getNuevosEmpleadores(){
		$con = Database::connect();
		$query = "select emp.id_empleador, emp.nombre_empresa, emp.pagina_web,
						 emp.nombre_contacto,emp.email_contacto
					 from tbl_empleador as emp
					where estado = 'Nuevo'
					order by ultimo_acceso asc";
		
				$stmt = $con->prepare ( $query );
				$stmt->execute ();
				Database::disconnect();
				return $stmt;
		
	}
	
	public static function getEmail($idOferta){
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "select emp.email_contacto 
from tbl_empleador as emp,
tbl_oferta as ofe
where ofe.id_oferta  = ? and 
emp.id_empleador  = ofe.tbl_empleador_id_empleador";
		$q = $pdo->prepare($sql);
		$q->execute(array($idOferta));
		return $q;
	}
	
	public static function getEmailById($idEmpleador){
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "select emp.email_contacto from tbl_empleador as emp where emp.id_empleador  = ?;";
		$q = $pdo->prepare($sql);
		$q->execute(array($idEmpleador));
		return $q;
	}
	
	
	/*
	 * 3 operaciones
	 * 1) Actualizar el estado del empleador
	 * 2) Escribir en la bitacora
	 * 3) Mandar correo al empleador y al grupo de admin
	 */
	public static function activar ( $idEmpleador, $responsableAdmin, $responsableEmp ){
		$query = "update tbl_empleador set estado = 'Activo' where id_empleador = ? ";
		
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
	
		$stmt->bindParam ( 1, $idEmpleador );
		
		$res =  $stmt->execute ();
		
		if($res){
			Database::disconnect();
			
			error_log ( 'Activado Empleador procediendo a registrar en la bitacora y enviar correo', 0 );
			
			$empleador = null;
			// Si se escribio en la Bitacora y se pudo crear
			$resBit = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idEmpleador, $empleador, $responsableAdmin, 'Nuevo Empleador - Activado', 'ACTIVACION' );
			
			// Enviamos correo a los grupos de admin
			
			$admonEmail = EmailDistributionList::getEmailAdministradores ();
			
			// Enviamos correo al representante del Empleador			
			$q = self::getEmailById($idEmpleador);			
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailEmpleador = $data['email_contacto'];
			$empleadorEmail = array();
			array_push($empleadorEmail, $emailEmpleador);
			
			$greeting = "Estimado Empleador: " ;
			$message =  " \n  Bienvenido su cuenta ha sido activada esperamos que pueda ingresar al SITRABS ";
			$subject = " SITRABS - Activacion de Cuenta completada ";			
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $empleadorEmail );
			
			$greeting = "Estimado Administrador: " ;
			$message =  " \n  Un nuevo empleador ha sido dado de alta en SITRABS, puede revisar las bitacoras para mayor detalle ";
			$subject = " SITRABS - Activacion de Cuenta completada ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $admonEmail );
			
			return true;
		}else{
			return false;
		}
	
	}
	
	
	/*
	 * 3 operaciones
	* 1) Actualizar el estado del empleador
	* 2) Escribir en la bitacora
	* 3) Mandar correo al empleador y al grupo de admin
	*/
	public static function rechazar ( $idEmpleador, $responsableAdmin, $responsableEmp , $comentario ){
		$query = "update tbl_empleador set estado = 'Rechazado' where id_empleador = ?";

		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
	
	
		$stmt->bindParam ( 1, $idEmpleador );
	
		$res =  $stmt->execute ();
	
		if($res){
			Database::disconnect();
				
			error_log ( 'Rechazado Empleador procediendo a registrar en la bitacora y enviar correo', 0 );
				
			$empleador = null;
			// Si se escribio en la Bitacora y se pudo crear
			$resBit = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idEmpleador, $empleador, $responsableAdmin, $comentario, 'RECHAZADO' );
				
			// Enviamos correo a los grupos de admin
				
			$admonEmail = EmailDistributionList::getEmailAdministradores ();
				
			// Enviamos correo al representante del Empleador
			$q = self::getEmailById($idEmpleador);
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailEmpleador = $data['email_contacto'];
			$empleadorEmail = array();
			array_push($empleadorEmail, $emailEmpleador);
				
			$greeting = "Estimado Empleador: " ;
			$message =  " \n  Por motivos de fuerza mayor su cuenta de acceso ha sido denegada.  ";
			$subject = " SITRABS - Acceso Denegado ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $empleadorEmail );
				
			$greeting = "Estimado Administrador: " ;
			$message =  " \n  Se ha denegado el acceso a un nuevo empleador, puede revisar las bitacoras para mayor detalle ";
			$subject = " SITRABS - Acceso denegado ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $admonEmail );
				
			return true;
		}else{
			return false;
		}
	
	}
	
	public static function getEmpleadoresFiltrados($giro, $estado ){

		$con = Database::connect ();
		$query1 = 'select  emp.id_empleador, emp.nombre_empresa, emp.pagina_web,  gir.descripcion_giro_empresa , emp.estado
					from 
						tbl_empleador as emp, 
						tbl_giro_empresa as gir
					where   ';

		$query2 = ' ' ;
		
		if($giro != 0 ){
			$query2 = $query2 . '  emp.id_giro_empresa = ' . $giro . ' and ';
		}
		if($estado != 'Cualquier' ){
			$query2 = $query2 . " emp.estado = '" . $estado . "' and ";
		}
		
		$query3= ' gir.id_giro_empresa = emp.id_giro_empresa ';
		
		
		$query =  $query1 . $query2 . $query3 ;
		
		error_log ( ' QUery para busqueda de empleadores: ' . $query, 0 );
		$stmt = $con->prepare ( $query );
		$stmt->execute ();
		Database::disconnect ();
		return $stmt;
	}
	
	
	/*
	 * 3 operaciones
	* 1) Actualizar el estado del empleador
	* 2) Escribir en la bitacora
	* 3) Mandar correo al empleador y al grupo de admin
	*/
	public static function activarConOfertas ( $idEmpleador, $responsableAdmin, $responsableEmp ){
		$query = "update tbl_empleador set estado = 'Activo' where id_empleador = ? ";
	
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
	
	
		$stmt->bindParam ( 1, $idEmpleador );
	
		$res =  $stmt->execute ();
	
		if($res){
			Database::disconnect();
				
			error_log ( 'Activado Empleador procediendo a registrar en la bitacora, y activar ofertas y enviar correo', 0 );
				
			$empleador = null;
			// Si se escribio en la Bitacora y se pudo crear
			$resBit = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idEmpleador, $empleador, $responsableAdmin, 'Activacion Empleador', 'ACTIVACION' );
				
			// Enviamos correo a los grupos de admin
				
			$admonEmail = EmailDistributionList::getEmailAdministradores ();
				
			// Enviamos correo al representante del Empleador
			$q = self::getEmailById($idEmpleador);
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailEmpleador = $data['email_contacto'];
			$empleadorEmail = array();
			array_push($empleadorEmail, $emailEmpleador);
			
			error_log(' EMail empleador: ' . $emailEmpleador, 0);
			$greeting = "Estimado Empleador: " ;
			$message =  " \n  Tue cuenta de acceso ha sido activada esperamos que pueda ingresar al SITRABS ";
			$subject = " SITRABS - Activacion de Cuenta  ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $empleadorEmail );
				
			$greeting = "Estimado Administrador: " ;
			$message =  " \n  Un nuevo empleador ha sido activado en SITRABS ";
			$subject = " SITRABS - Activacion de Cuenta ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $admonEmail );

			$resActivarOfertas = OfertaDTO::cambiarEstadoOferta('Activa',$idEmpleador) ;
			$resActivarAplicaciones = OfertaDTO::cambiarEstadoAplicaciones('Activa', $idEmpleador);
			return true;
		}else{
			return false;
		}
	
	}
	
	public static function desactivarConOfertas ( $idEmpleador, $responsableAdmin, $responsableEmp , $comentario ){
		$query = "update tbl_empleador set estado = 'Inactivo' where id_empleador = ?";
	
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
	
	
		$stmt->bindParam ( 1, $idEmpleador );
	
		$res =  $stmt->execute ();
	
		if($res){
			Database::disconnect();
	
			error_log ( 'Desactivando Empleador procediendo a registrar en la bitacora y enviar correo', 0 );
	
			$empleador = null;
			// Si se escribio en la Bitacora y se pudo crear
			$resBit = BitacoraEmpleador::addRegisterBitacoraEmpleador ( $idEmpleador, $empleador, $responsableAdmin, $comentario, 'DESACTIVACION' );
	
			// Enviamos correo a los grupos de admin
	
			$admonEmail = EmailDistributionList::getEmailAdministradores ();
	
			// Enviamos correo al representante del Empleador
			$q = self::getEmailById($idEmpleador);
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailEmpleador = $data['email_contacto'];
			$empleadorEmail = array();
			array_push($empleadorEmail, $emailEmpleador);
	
			$greeting = "Estimado Empleador: " ;
			$message =  " \n  Por motivos de fuerza mayor su cuenta de acceso ha sido desactivada.  ";
			$subject = " SITRABS - Desactivacion de Cuenta ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $empleadorEmail );
	
			$greeting = "Estimado Administrador: " ;
			$message =  " \n  Se ha denegado el acceso a un nuevo empleador, puede revisar las bitacoras para mayor detalle ";
			$subject = " SITRABS - Desactivacion de Cuenta ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $admonEmail );
			$resActivarOfertas = OfertaDTO::cambiarEstadoOferta('Inactiva',$idEmpleador) ;
			$resActivarAplicaciones = OfertaDTO::cambiarEstadoAplicaciones('Inactiva', $idEmpleador);
			return true;
		}else{
			return false;
		}
	
	}
	
}

?>